// Result.cpp : 任务执行结果
//

#include "ThreadPool.h"

Result::Result(std::shared_ptr<Task> task_ptr, bool isValid)
	: task_ptr_(task_ptr)
	, isValid_(isValid)
{
	task_ptr_->setResult(this); // 绑定任务返回结果
}

void Result::setValue(Any any)
{
	this->any_ = std::move(any);
	/* 已经获取任务的返回值 */
	sem_.signal();
}

Any Result::getResult()
{
	if (!isValid_)
	{
		return Any();
	}
	/* 等待任务执行 */
	sem_.wait();

	return std::move(any_);
}